package org.example.servicepay.controller;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.example.model.manage.bean.Result;
import org.example.servicepay.service.AlipayService;
import org.example.servicepay.service.PayService;
import org.example.servicepay.service.StudentPayService;
import org.example.servicepay.vo.AlipayAppOrderResponse;
import org.example.servicepay.vo.PaymentResponse;
import org.example.servicepay.vo.QrcodePayRequest;
import org.example.model.manage.bean.vo.PendingPayVO;

import java.util.List;
import org.springframework.web.bind.annotation.*;

import jakarta.validation.Valid;

/**
 * 支付控制器
 * 支付宝支付功能
 */
@Slf4j
@RestController
@RequestMapping("/api/pay")
@RequiredArgsConstructor
public class PayController {

    private final PayService payService;
    private final StudentPayService studentPayService;
    private final AlipayService alipayService;

    /**
     * 查询学生的待支付项目
     * @param studentId 学生ID
     * @return 待支付项目列表
     */
    @GetMapping("/pending-payments")
    public Result<List<PendingPayVO>> getPendingPayments(@RequestParam String studentId) {
        try {
            log.info("查询学生待支付项目，学生ID：{}", studentId);
            return studentPayService.getPendingPayments(studentId);
        } catch (Exception e) {
            log.error("查询待支付项目失败：{}", e.getMessage(), e);
            return Result.error(10034, "查询待支付项目失败：" + e.getMessage());
        }
    }

    /**
     * 创建支付宝APP支付订单
     * @param studentId 学生ID
     * @param feeItemId 缴费项目ID
     * @return 支付订单信息
     */
    @PostMapping("/app-order")
    public Result<AlipayAppOrderResponse> createAlipayAppOrder(
            @RequestParam String studentId,
            @RequestParam Long feeItemId) {
        try {
            log.info("创建支付宝APP支付订单，学生ID：{}，缴费项目ID：{}", studentId, feeItemId);
            return alipayService.createAlipayAppOrder(studentId, feeItemId);
        } catch (Exception e) {
            log.error("创建支付宝订单失败：{}", e.getMessage(), e);
            return Result.error(10035, "创建支付宝订单失败：" + e.getMessage());
        }
    }
    
    /**
     * 查询支付宝订单状态
     * @param outTradeNo 商户订单号（可选）
     * @param tradeNo 支付宝交易号（可选）
     * @return 订单状态信息
     */
    @GetMapping("/order-status")
    public Result<String> queryAlipayOrderStatus(
            @RequestParam(required = false) String outTradeNo,
            @RequestParam(required = false) String tradeNo) {
        try {
            log.info("查询支付宝订单状态，商户订单号：{}，支付宝交易号：{}", outTradeNo, tradeNo);
            // 至少需要提供一个参数
            if ((outTradeNo == null || outTradeNo.isEmpty()) && (tradeNo == null || tradeNo.isEmpty())) {
                return Result.error(10039, "商户订单号和支付宝交易号至少需要提供一个");
            }
            return alipayService.queryAlipayOrderStatus(outTradeNo, tradeNo);
        } catch (Exception e) {
            log.error("查询支付宝订单状态失败：{}", e.getMessage(), e);
            return Result.error(10040, "查询支付宝订单状态失败：" + e.getMessage());
        }
    }
}